The preferred apparatus for and method of practicing the present invention is associated with an ink jet printer wherein a print head scans a print medium, most typically a sheet of paper, by shuttling back and forth across the sheet of paper or by moving continuously along the sheet of paper which is held against a rotating drum. Images are formed by selectively depositing ink deposits or image elements, also referred to as pixels or dots, which are located in a dot-matrix on lines and in columns. The present invention, however, is equally applicable to any printing process wherein a print head travels along parallel lines relative to a print medium to form a desired final image, whether that image be graphic or textual.
Inherent in any such printing system is the requirement that actual printing be limited to the image area. This means that the printing system must be able to determine when each ink jet nozzle orifice or printing element of the print head crosses an image edge, and whether the print head is moving onto or off of the image.
Multiple-orifice print heads pose a difficult challenge for the control electronics when printing over the image edges is considered. Unless all of the orifices are arranged in a single vertical line, it is necessary to selectively "turn on" each jet in succession in the correct pattern as the head moves onto the image from the left and to turn off each jet in the same fashion as the head moves off of the image to the right. In the case of bidirectional head printing, this process must also be reversed as the head moves back across the image from right to left. In a printer made according to the preferred embodiment, there is no mechanism for actually enabling or disabling individual jets; thus turning selected jets on or off must be accomplished by inserting zeros in the serial data stream going to the head. This process must take place quickly and transparently so as not to interfere with the printing process.
The common solution for the above problem is to "pad" the image data with a section of zero or blank data equal in width to the head overscan on each side of the image in the image buffer. Thus, as the image-data elements are read from memory and formatted for the head, jets which would be printing off of the image edges are automatically sent zeros. In the case of the preferred printer, the head is quite wide (&gt;3 inches) and thus very large sections of memory would have to be filled with blanks in order to use this approach. Indeed, for printing of images on standard 8.5.times.11 inch paper with normal margins, more than half of the entire image buffer memory would end up being filled with zeros. Consequently, the image buffer memory would end up being more than twice as large as would otherwise have been required. Not only is this very wasteful of memory and thus expensive, it could potentially result in a severe throughput penalty due to the time required to write zeros to all those memory locations.
Another approach is to use a look-up table in ROM or software that selectively allows head data to pass using as a table address the number of image elements from image edge. This approach is also expensive. Special circuitry is necessary to calculate the "distance from the image edge" and, more importantly, the ROM required to handle the edge sequences for a head with nearly one hundred jets, as is the case with the preferred embodiment, is very large.